﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using Microsoft.Reporting.WebForms;
using System.Collections.Specialized;

public partial class genCorrelativoListar : ObjectPage
{

    #region CONSTANTES

    protected const string REPORTE_RUTA = "/Galexito_MAIN/genCorrelativoListar";
    protected const string EDITAR_RUTA = "~/gen/genCorrelativoEditar.aspx";

    #endregion 

    #region PROPIEDADES

    protected int NumeroPagina = 0;

    #endregion PROPIEDADES

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuListarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {            
            Cargar();
            Listar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Buscar":
                ucpagLista.NumeroPagina = 1;
                Listar();
                break;
            case "Nuevo":
                Nuevo();
                break;
            case "Exportar":
                Exportar();
                break;
            case "Imprimir":
                Imprimir();
                break;
        }
    }

    protected void ucpagLista_CambioPagina(object sender, EventArgs e)
    {
        Listar();
    }

    protected void lvLista_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        string strIdModelo = e.CommandArgument.ToString();
        switch (e.CommandName)
        {
            case "Editar":
                Editar(strIdModelo);
                break;
            case "Eliminar":
                Eliminar(strIdModelo);
                break;
        }
    }

    protected void lvLista_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        ImageButton ibt;
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            ibt = (ImageButton)e.Item.FindControl("ibtEliminar");
            Label lb = (Label)e.Item.FindControl("lblEstado");
            if (((Label)e.Item.FindControl("lblEstado")).Text == Constantes.ESTADO_ACTIVO_DESC)
            {
                ibt.ImageUrl = Constantes.ESTADO_ACTIVO_URL;
                ibt.ToolTip = Resources.resDiccionario.Inactivar;
            }
            else
            {
                ibt.ImageUrl = Constantes.ESTADO_INACTIVO_URL;
                ibt.ToolTip = Resources.resDiccionario.Activar;
            }
        }
    }

    #endregion 

    #region METODOS

    protected void Cargar()
    {
        //Master.Titulo.Text = "Nivel Alerta";
        ucpagLista.NumeroPagina = 1;
        ddlIdCompania.SelectedIndex = 0; //Estado Activo
        ddlIdTipoCorrelativo.SelectedIndex = 0; //Estado Activo
        ddlIdOrigenReplicacion.SelectedIndex = 0; //Estado Activo
        ddlEstado.SelectedIndex = 0; //Estado Activo
        txtSerie.Text = string.Empty;
        
        //Cargar Estado 
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");

        //Cargar Estado 
        Util.loadComboAndItem(ddlIdCompania, ListarCompania(), "Descripcion", "IdCompania", string.Format("--{0}--", Resources.resDiccionario.Todos), "0");
        Util.loadComboAndItem(ddlIdOrigenReplicacion, ListarOrigenReplicacion(), "Descripcion", "IdOrigenReplicacion", string.Format("--{0}--", Resources.resDiccionario.Todos), "0");
        Util.loadComboAndItem(ddlIdTipoCorrelativo, ListarTipoCorrelativo(), "Descripcion", "IdTipoCorrelativo", string.Format("--{0}--", Resources.resDiccionario.Todos), "0");

        //Configura Parametros
        ConfiguraParametros();
    }

    /// <summary>
    /// Método Lista
    /// </summary>
    /// <returns></returns>
    protected void Listar()
    {
        int intTotalFilas = 0, intFilasXPagina = 0;
        string strSerie = string.Empty, strEstado = string.Empty, strTipoLista = string.Empty, strIdCompania = string.Empty, strIdOrigenReplicacion = string.Empty, strIdTipoCorrelativo = string.Empty;

        strSerie = txtSerie.Text.Trim();
        strIdCompania = ddlIdCompania.SelectedValue;
        strIdOrigenReplicacion = ddlIdOrigenReplicacion.SelectedValue;
        strIdTipoCorrelativo = ddlIdTipoCorrelativo.SelectedValue;
        strEstado = ddlEstado.SelectedValue;
        int inNumeroPagina = NumeroPagina.Equals(0) ? ucpagLista.NumeroPagina : NumeroPagina;
        //Validar

        //Filtrar
        DataTable dt = ListarCorrelativo(int.Parse(ddlIdTipoCorrelativo.SelectedValue), int.Parse(ddlIdCompania.SelectedValue), int.Parse(ddlIdOrigenReplicacion.SelectedValue), strSerie, ddlEstado.SelectedValue, inNumeroPagina);
        lvLista.DataSource = dt;
        lvLista.DataBind();
        if (dt.Rows.Count > 0)
        {
            intFilasXPagina =  Convert.ToInt32(dt.Rows[0]["FilasXPagina"]);
            intTotalFilas = Convert.ToInt32(dt.Rows[0]["TotalFilas"]);
        }
        ucpagLista.TotalRegistros = intTotalFilas;
        ucpagLista.RegistrosPorPagina = intFilasXPagina;
        ucpagLista.EnlazarPaginador();
        ucpagLista.NumeroPagina = inNumeroPagina;
    }

    protected void Nuevo()
    {
        string strCadena = "?a=n";
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Editar(string strId)
    {
        string strCadena = string.Format("?a=e&i={0}&param1={1}", strId, ObtenerFiltroParametro());
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Eliminar(string strId)
    {
        string strCadena = string.Format("?a=d&i={0}&param1={1}", strId, ObtenerFiltroParametro());
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Exportar()
    {
        UtilExcel ut = new UtilExcel();
        DataTable dt = ListarCorrelativo(int.Parse(ddlIdTipoCorrelativo.SelectedValue), int.Parse(ddlIdCompania.SelectedValue), int.Parse(ddlIdOrigenReplicacion.SelectedValue), txtSerie.Text.Trim(), ddlEstado.SelectedValue, 0);
        dt.Columns.Remove("FilasXPagina");
        dt.Columns.Remove("TotalFilas");
        ut.ExportaAExcelHoja(dt, Resources.resDiccionario.Archivo, Resources.resDiccionario.Datos);
    }

    protected void Imprimir()
    {
        Util.ejecutaScriptAJAX(this.Page, string.Format("window.open('../rep/repPreview.aspx');"));
    }

    private string ObtenerFiltroParametro()
    {
        return string.Format("{0}|{1}|{2}|{3}|{4}|{5}", ucpagLista.NumeroPagina.ToString(), ddlIdTipoCorrelativo.SelectedValue, ddlIdCompania.SelectedValue, ddlIdOrigenReplicacion.SelectedValue, txtSerie.Text, ddlEstado.SelectedValue);
    }

    void ConfiguraParametros()
    {
        string strParam = HttpUtility.UrlDecode(Request.QueryString["param1"]);
        if (!string.IsNullOrEmpty(strParam))
        {
            string[] strFiltros = strParam.Split('|');
            NumeroPagina = int.Parse(strFiltros[0]);
            Util.SelectCombo(ddlIdTipoCorrelativo, strFiltros[1]);
            Util.SelectCombo(ddlIdCompania, strFiltros[2]);
            Util.SelectCombo(ddlIdOrigenReplicacion, strFiltros[3]);
            txtSerie.Text = strFiltros[4];
            Util.SelectCombo(ddlEstado, strFiltros[5]);
        }
    }


    #endregion

    #region WEBSERVICES

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataTable ListarCorrelativo(int pintIdTipoCorrelativo, int pintIdCompania, int pintIdOrigenReplicacion, string pstrSerie, string pstrEstado, int pintPagina)
    {
        WCCorrelativo.BECorrelativo be = new WCCorrelativo.BECorrelativo();
        be.IdTipoCorrelativo = pintIdTipoCorrelativo;
        be.IdCompania = pintIdCompania;
        be.IdOrigenReplicacion = pintIdOrigenReplicacion;

        be.Serie = pstrSerie;
        be.Estado = pstrEstado;
        be.Pagina = pintPagina;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCorrelativo.IWCCorrelativo>("BasicHttpBinding_IWCCorrelativo"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.Listar(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }


    /// <summary>
    /// Método Lista Datos de ParametroDetalle
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }


    /// <summary>
    /// Método Lista Datos de Pais
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarCompania()
    {

        WCCompania.BECompania be = new WCCompania.BECompania();

        be.CodigoCompania = "";
        be.Descripcion = "";
        be.Estado = "A";
        //be.Pagina = 1;

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCompania.IWCCompania>("BasicHttpBinding_IWCCompania"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Datos de Pais
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarTipoCorrelativo()
    {

        WCTipoCorrelativo.BETipoCorrelativo be = new WCTipoCorrelativo.BETipoCorrelativo();

        be.CodigoTipo = "";
        be.Descripcion = "";
        be.Estado = "A";
        //be.Pagina = 1;

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCTipoCorrelativo.IWCTipoCorrelativo>("BasicHttpBinding_IWCTipoCorrelativo"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Datos de Pais
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarOrigenReplicacion()
    {

        WCOrigenReplicacion.BEOrigenReplicacion be = new WCOrigenReplicacion.BEOrigenReplicacion();

        be.CodigoOrigen = "";
        be.Descripcion = "";
        be.Estado = "A";
        //be.Pagina = 1;

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCOrigenReplicacion.IWCOrigenReplicacion>("BasicHttpBinding_IWCOrigenReplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }
    #endregion


}